home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / proc / ds5000.md / procMach.h < prev   
C/C++ Source or Header  |  1992-12-18  |  3KB  |  110 lines

  1. /*
  2.  * procAOUT.h --
  3.  *
  4.  *    The a.out format for an object file.
  5.  *
  6.  * Copyright (C) 1989 Digital Equipment Corporation.
  7.  * Permission to use, copy, modify, and distribute this software and
  8.  * its documentation for any purpose and without fee is hereby granted,
  9.  * provided that the above copyright notice appears in all copies.  
  10.  * Digital Equipment Corporation makes no representations about the
  11.  * suitability of this software for any purpose.  It is provided "as is"
  12.  * without express or implied warranty.
  13.  *
  14.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/proc/ds5000.md/procMach.h,v 9.3 90/02/20 15:35:50 shirriff Exp $ SPRITE (Berkeley)
  15.  */
  16.  
  17. #ifndef _PROCMACH
  18. #define _PROCMACH
  19.  
  20. #include "sprite.h"
  21.  
  22. /*
  23.  * File header magic number.
  24.  */
  25. #define    PROC_OBJ_MAGIC    0x0162
  26.  
  27. /*
  28.  * A.out header magic number.
  29.  */
  30. #define    PROC_OMAGIC    0407        /* Impure format */
  31. #define    PROC_NMAGIC    0410        /* Shared text format */
  32. #define    PROC_ZMAGIC    0413        /* Demand load format */
  33. #define    PROC_LIBMAGIC    0443        /* Share library format */
  34.  
  35. /*
  36.  * Description of the file.
  37.  */
  38. typedef struct {
  39.     unsigned short    magic;        /* The magic number. */
  40.     unsigned short    numSections;    /* The number of sections. */
  41.     long        timeDateStamp;    /* Time and date stamp. */        
  42.     long        symPtr;        /* File pointer to symbolic header. */    
  43.     long        numSyms;    /* Size of symbolic header. */
  44.     unsigned short    optHeader;    /* Size of optional header. */
  45.     unsigned short    flags;        /* Flags. */
  46. } ProcFileHeader;
  47.  
  48. /*
  49.  * A.out header.
  50.  */
  51. typedef struct {
  52.     short        magic;        /* Magic number. */
  53.     short        verStamp;    /* Version stamp. */
  54.     long        codeSize;    /* Code size in bytes. */
  55.     long        heapSize;    /* Initialized data size in bytes. */
  56.     long        bssSize;    /* Uninitialized data size in bytes. */
  57.     Address        entry;        /* Entry point. */
  58.     Address        codeStart;    /* Base of code used for this file. */
  59.     Address        heapStart;    /* Base of heap used for this file. */
  60.     Address        bssStart;    /* Base of bss used for this file. */
  61.     long        gprMask;    /* General purpose register mask. */
  62.     long        cprMask[4];    /* Co-processor register masks. */
  63.     long        gpValue;    /* The gp value for this object. */
  64. } ProcAOUTHeader;
  65.  
  66. /*
  67.  * Section header.
  68.  */
  69. typedef struct {
  70.     char        name[8];    /* Section name. */
  71.     long        physAddr;    /* Section physical address. */
  72.     long        virtAddr;    /* Section virtual address. */
  73.     long        size;        /* Section size. */
  74.     long        sectionPtr;    /* File pointer to section data.  */
  75.     long        relocPtr;    /* File pointer to relocation data.  */
  76.     long        lnnoPtr;    /* File pointer to gp tables. */
  77.     unsigned short    numReloc;    /* Number of relocation entries. */
  78.     unsigned short    numLnno;    /* Numberof gp tables. */
  79.     long        flags;        /* Section flags. */
  80. } ProcSectionHeader;
  81.  
  82. /*
  83.  * The header at the beginning of each file.
  84.  */
  85. typedef struct {
  86.     ProcFileHeader    fileHeader;
  87.     ProcAOUTHeader    aoutHeader;
  88. } ProcExecHeader;
  89.  
  90. /*
  91.  * Default place for a text segment.
  92.  */
  93. #define DEFAULT_TEXT    0x00400000
  94.  
  95. /*
  96.  * Determine the offset of the text segment in the file, given the header.
  97.  * (This is the same function as N_TXTOFF)
  98.  */
  99. #define PROC_CODE_FILE_OFFSET(hdr) \
  100.     ( ((hdr).fileHeader.magic==PROC_ZMAGIC)? 0 : \
  101.     ((sizeof(ProcExecHeader) + \
  102.         (hdr).fileHeader.numSections*sizeof(ProcSectionHeader) + \
  103.         ((hdr).aoutHeader.verStamp<23?7:15)) & \
  104.         ~((long)(((hdr).aoutHeader.verStamp<23?7:15))) ) )
  105.  
  106. #define PROC_DATA_FILE_OFFSET(x) \
  107.     (PROC_CODE_FILE_OFFSET(x) + (x).aoutHeader.codeSize)
  108.  
  109. #endif /* _PROCMACH */
  110.